home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / tex31 / texsrc.lzh / TEXSRC.LZH / tex0.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-28  |  19.3 KB  |  1,013 lines

  1. #define EXTERN extern
  2. #include "texd.h"
  3.  
  4. void println ( ) 
  5. {println_regmem 
  6.   switch ( selector ) 
  7.   {case 19 : 
  8.     {
  9.       (void) putc('\n',  stdout );
  10.       (void) putc('\n',  logfile );
  11.       termoffset = 0 ; 
  12.       fileoffset = 0 ; 
  13.     } 
  14.     break ; 
  15.   case 18 : 
  16.     {
  17.       (void) putc('\n',  logfile );
  18.       fileoffset = 0 ; 
  19.     } 
  20.     break ; 
  21.   case 17 : 
  22.     {
  23.       (void) putc('\n',  stdout );
  24.       termoffset = 0 ; 
  25.     } 
  26.     break ; 
  27.   case 16 : 
  28.   case 20 : 
  29.   case 21 : 
  30.     ; 
  31.     break ; 
  32.     default: 
  33.     (void) putc('\n',  writefile [ selector ] );
  34.     break ; 
  35.   } 
  36. void zprintchar ( s ) 
  37. ASCIIcode s ; 
  38. {/* 10 */ printchar_regmem 
  39.   if ( s == eqtb [ 6212 ] .cint ) 
  40.   if ( selector < 20 ) 
  41.   {
  42.     println () ; 
  43.     return ; 
  44.   } 
  45.   switch ( selector ) 
  46.   {case 19 : 
  47.     {
  48.       (void) putc( Xchr ( s ) ,  stdout );
  49.       (void) putc( Xchr ( s ) ,  logfile );
  50.       incr ( termoffset ) ; 
  51.       incr ( fileoffset ) ; 
  52.       if ( termoffset == maxprintline ) 
  53.       {
  54.     (void) putc('\n',  stdout );
  55.     termoffset = 0 ; 
  56.       } 
  57.       if ( fileoffset == maxprintline ) 
  58.       {
  59.     (void) putc('\n',  logfile );
  60.     fileoffset = 0 ; 
  61.       } 
  62.     } 
  63.     break ; 
  64.   case 18 : 
  65.     {
  66.       (void) putc( Xchr ( s ) ,  logfile );
  67.       incr ( fileoffset ) ; 
  68.       if ( fileoffset == maxprintline ) 
  69.       println () ; 
  70.     } 
  71.     break ; 
  72.   case 17 : 
  73.     {
  74.       (void) putc( Xchr ( s ) ,  stdout );
  75.       incr ( termoffset ) ; 
  76.       if ( termoffset == maxprintline ) 
  77.       println () ; 
  78.     } 
  79.     break ; 
  80.   case 16 : 
  81.     ; 
  82.     break ; 
  83.   case 20 : 
  84.     if ( tally < trickcount ) 
  85.     trickbuf [ tally % errorline ] = s ; 
  86.     break ; 
  87.   case 21 : 
  88.     {
  89.       if ( poolptr < poolsize ) 
  90.       {
  91.     strpool [ poolptr ] = s ; 
  92.     incr ( poolptr ) ; 
  93.       } 
  94.     } 
  95.     break ; 
  96.     default: 
  97.     (void) putc( Xchr ( s ) ,  writefile [ selector ] );
  98.     break ; 
  99.   } 
  100.   incr ( tally ) ; 
  101. void zprint ( s ) 
  102. integer s ; 
  103. {/* 10 */ print_regmem 
  104.   poolpointer j  ; 
  105.   if ( s >= strptr ) 
  106.   s = 259 ; 
  107.   else if ( s < 256 ) 
  108.   if ( s < 0 ) 
  109.   s = 259 ; 
  110.   else if ( ( s == eqtb [ 6212 ] .cint ) ) 
  111.   if ( selector < 20 ) 
  112.   {
  113.     println () ; 
  114.     return ; 
  115.   } 
  116.   j = strstart [ s ] ; 
  117.   while ( j < strstart [ s + 1 ] ) {
  118.       
  119.     printchar ( strpool [ j ] ) ; 
  120.     incr ( j ) ; 
  121.   } 
  122. void zslowprint ( s ) 
  123. integer s ; 
  124. {/* 10 */ slowprint_regmem 
  125.   poolpointer j  ; 
  126.   if ( s >= strptr ) 
  127.   s = 259 ; 
  128.   else if ( s < 256 ) 
  129.   if ( s < 0 ) 
  130.   s = 259 ; 
  131.   else if ( ( s == eqtb [ 6212 ] .cint ) ) 
  132.   if ( selector < 20 ) 
  133.   {
  134.     println () ; 
  135.     return ; 
  136.   } 
  137.   j = strstart [ s ] ; 
  138.   while ( j < strstart [ s + 1 ] ) {
  139.       
  140.     print ( strpool [ j ] ) ; 
  141.     incr ( j ) ; 
  142.   } 
  143. void zprintnl ( s ) 
  144. strnumber s ; 
  145. {printnl_regmem 
  146.   if ( ( ( termoffset > 0 ) && ( odd ( selector ) ) ) || ( ( fileoffset > 0 ) 
  147.   && ( selector >= 18 ) ) ) 
  148.   println () ; 
  149.   print ( s ) ; 
  150. void zprintesc ( s ) 
  151. strnumber s ; 
  152. {printesc_regmem 
  153.   integer c  ; 
  154.   c = eqtb [ 6208 ] .cint ; 
  155.   if ( c >= 0 ) 
  156.   if ( c < 256 ) 
  157.   print ( c ) ; 
  158.   print ( s ) ; 
  159. void zprintthedigs ( k ) 
  160. eightbits k ; 
  161. {printthedigs_regmem 
  162.   while ( k > 0 ) {
  163.       
  164.     decr ( k ) ; 
  165.     if ( dig [ k ] < 10 ) 
  166.     printchar ( 48 + dig [ k ] ) ; 
  167.     else printchar ( 55 + dig [ k ] ) ; 
  168.   } 
  169. void zprintint ( n ) 
  170. integer n ; 
  171. {printint_regmem 
  172.   schar k  ; 
  173.   integer m  ; 
  174.   k = 0 ; 
  175.   if ( n < 0 ) 
  176.   {
  177.     printchar ( 45 ) ; 
  178.     if ( n > -100000000L ) 
  179.     n = - (integer) n ; 
  180.     else {
  181.     
  182.       m = -1 - n ; 
  183.       n = m / 10 ; 
  184.       m = ( m % 10 ) + 1 ; 
  185.       k = 1 ; 
  186.       if ( m < 10 ) 
  187.       dig [ 0 ] = m ; 
  188.       else {
  189.       
  190.     dig [ 0 ] = 0 ; 
  191.     incr ( n ) ; 
  192.       } 
  193.     } 
  194.   } 
  195.   do {
  196.       dig [ k ] = n % 10 ; 
  197.     n = n / 10 ; 
  198.     incr ( k ) ; 
  199.   } while ( ! ( n == 0 ) ) ; 
  200.   printthedigs ( k ) ; 
  201. void zprintcs ( p ) 
  202. integer p ; 
  203. {printcs_regmem 
  204.   if ( p < 514 ) 
  205.   if ( p >= 257 ) 
  206.   if ( p == 513 ) 
  207.   {
  208.     printesc ( 500 ) ; 
  209.     printesc ( 501 ) ; 
  210.   } 
  211.   else {
  212.       
  213.     printesc ( p - 257 ) ; 
  214.     if ( eqtb [ 4883 + p - 257 ] .hh .v.RH == 11 ) 
  215.     printchar ( 32 ) ; 
  216.   } 
  217.   else if ( p < 1 ) 
  218.   printesc ( 502 ) ; 
  219.   else print ( p - 1 ) ; 
  220.   else if ( p >= 3781 ) 
  221.   printesc ( 502 ) ; 
  222.   else if ( ( hash [ p ] .v.RH >= strptr ) ) 
  223.   printesc ( 503 ) ; 
  224.   else {
  225.       
  226.     printesc ( 335 ) ; 
  227.     slowprint ( hash [ p ] .v.RH ) ; 
  228.     printchar ( 32 ) ; 
  229.   } 
  230. void zsprintcs ( p ) 
  231. halfword p ; 
  232. {sprintcs_regmem 
  233.   if ( p < 514 ) 
  234.   if ( p < 257 ) 
  235.   print ( p - 1 ) ; 
  236.   else if ( p < 513 ) 
  237.   printesc ( p - 257 ) ; 
  238.   else {
  239.       
  240.     printesc ( 500 ) ; 
  241.     printesc ( 501 ) ; 
  242.   } 
  243.   else {
  244.       
  245.     printesc ( 335 ) ; 
  246.     slowprint ( hash [ p ] .v.RH ) ; 
  247.   } 
  248. void zprintfilename ( n , a , e ) 
  249. integer n ; 
  250. integer a ; 
  251. integer e ; 
  252. {printfilename_regmem 
  253.   print ( a ) ; 
  254.   print ( n ) ; 
  255.   print ( e ) ; 
  256. void zprintsize ( s ) 
  257. integer s ; 
  258. {printsize_regmem 
  259.   if ( s == 0 ) 
  260.   printesc ( 408 ) ; 
  261.   else if ( s == 16 ) 
  262.   printesc ( 409 ) ; 
  263.   else printesc ( 410 ) ; 
  264. void zprintwritewhatsit ( s , p ) 
  265. strnumber s ; 
  266. halfword p ; 
  267. {printwritewhatsit_regmem 
  268.   printesc ( s ) ; 
  269.   if ( mem [ p + 1 ] .hh .v.LH < 16 ) 
  270.   printint ( mem [ p + 1 ] .hh .v.LH ) ; 
  271.   else if ( mem [ p + 1 ] .hh .v.LH == 16 ) 
  272.   printchar ( 42 ) ; 
  273.   else printchar ( 45 ) ; 
  274. #ifdef DEBUG
  275. #endif /* DEBUG */
  276. void jumpout ( ) 
  277. {jumpout_regmem 
  278.   closefilesandterminate () ; 
  279.   {
  280.     flush ( stdout ) ; 
  281.     readyalready = 0 ; 
  282.     if ( ( history != 0 ) && ( history != 1 ) ) 
  283.     uexit ( 1 ) ; 
  284.     else uexit ( 0 ) ; 
  285.   } 
  286. void error ( ) 
  287. {/* 22 10 */ error_regmem 
  288.   ASCIIcode c  ; 
  289.   integer s1, s2, s3, s4  ; 
  290.   if ( history < 2 ) 
  291.   history = 2 ; 
  292.   printchar ( 46 ) ; 
  293.   showcontext () ; 
  294.   if ( interaction == 3 ) 
  295.   while ( true ) {
  296.       
  297.     lab22: clearforerrorprompt () ; 
  298.     {
  299.       wakeupterminal () ; 
  300.       print ( 264 ) ; 
  301.       terminput () ; 
  302.     } 
  303.     if ( last == first ) 
  304.     return ; 
  305.     c = buffer [ first ] ; 
  306.     if ( c >= 97 ) 
  307.     c = c - 32 ; 
  308.     switch ( c ) 
  309.     {case 48 : 
  310.     case 49 : 
  311.     case 50 : 
  312.     case 51 : 
  313.     case 52 : 
  314.     case 53 : 
  315.     case 54 : 
  316.     case 55 : 
  317.     case 56 : 
  318.     case 57 : 
  319.       if ( deletionsallowed ) 
  320.       {
  321.     s1 = curtok ; 
  322.     s2 = curcmd ; 
  323.     s3 = curchr ; 
  324.     s4 = alignstate ; 
  325.     alignstate = 1000000L ; 
  326.     OKtointerrupt = false ; 
  327.     if ( ( last > first + 1 ) && ( buffer [ first + 1 ] >= 48 ) && ( 
  328.     buffer [ first + 1 ] <= 57 ) ) 
  329.     c = c * 10 + buffer [ first + 1 ] - 48 * 11 ; 
  330.     else c = c - 48 ; 
  331.     while ( c > 0 ) {
  332.         
  333.       gettoken () ; 
  334.       decr ( c ) ; 
  335.     } 
  336.     curtok = s1 ; 
  337.     curcmd = s2 ; 
  338.     curchr = s3 ; 
  339.     alignstate = s4 ; 
  340.     OKtointerrupt = true ; 
  341.     {
  342.       helpptr = 2 ; 
  343.       helpline [ 1 ] = 277 ; 
  344.       helpline [ 0 ] = 278 ; 
  345.     } 
  346.     showcontext () ; 
  347.     goto lab22 ; 
  348.       } 
  349.       break ; 
  350.     ;
  351. #ifdef DEBUG
  352.     case 68 : 
  353.       {
  354.     debughelp () ; 
  355.     goto lab22 ; 
  356.       } 
  357.       break ; 
  358. #endif /* DEBUG */
  359.     case 69 : 
  360.       if ( baseptr > 0 ) 
  361.       {
  362.     editnamestart = strstart [ inputstack [ baseptr ] .namefield ] ; 
  363.     editnamelength = strstart [ inputstack [ baseptr ] .namefield + 1 ] - 
  364.     strstart [ inputstack [ baseptr ] .namefield ] ; 
  365.     editline = line ; 
  366.     jumpout () ; 
  367.       } 
  368.       break ; 
  369.     case 72 : 
  370.       {
  371.     if ( useerrhelp ) 
  372.     {
  373.       giveerrhelp () ; 
  374.       useerrhelp = false ; 
  375.     } 
  376.     else {
  377.         
  378.       if ( helpptr == 0 ) 
  379.       {
  380.         helpptr = 2 ; 
  381.         helpline [ 1 ] = 279 ; 
  382.         helpline [ 0 ] = 280 ; 
  383.       } 
  384.       do {
  385.           decr ( helpptr ) ; 
  386.         print ( helpline [ helpptr ] ) ; 
  387.         println () ; 
  388.       } while ( ! ( helpptr == 0 ) ) ; 
  389.     } 
  390.     {
  391.       helpptr = 4 ; 
  392.       helpline [ 3 ] = 281 ; 
  393.       helpline [ 2 ] = 280 ; 
  394.       helpline [ 1 ] = 282 ; 
  395.       helpline [ 0 ] = 283 ; 
  396.     } 
  397.     goto lab22 ; 
  398.       } 
  399.       break ; 
  400.     case 73 : 
  401.       {
  402.     beginfilereading () ; 
  403.     if ( last > first + 1 ) 
  404.     {
  405.       curinput .locfield = first + 1 ; 
  406.       buffer [ first ] = 32 ; 
  407.     } 
  408.     else {
  409.         
  410.       {
  411.         wakeupterminal () ; 
  412.         print ( 276 ) ; 
  413.         terminput () ; 
  414.       } 
  415.       curinput .locfield = first ; 
  416.     } 
  417.     first = last ; 
  418.     curinput .limitfield = last - 1 ; 
  419.     return ; 
  420.       } 
  421.       break ; 
  422.     case 81 : 
  423.     case 82 : 
  424.     case 83 : 
  425.       {
  426.     errorcount = 0 ; 
  427.     interaction = 0 + c - 81 ; 
  428.     print ( 271 ) ; 
  429.     switch ( c ) 
  430.     {case 81 : 
  431.       {
  432.         printesc ( 272 ) ; 
  433.         decr ( selector ) ; 
  434.       } 
  435.       break ; 
  436.     case 82 : 
  437.       printesc ( 273 ) ; 
  438.       break ; 
  439.     case 83 : 
  440.       printesc ( 274 ) ; 
  441.       break ; 
  442.     } 
  443.     print ( 275 ) ; 
  444.     println () ; 
  445.     flush ( stdout ) ; 
  446.     return ; 
  447.       } 
  448.       break ; 
  449.     case 88 : 
  450.       {
  451.     interaction = 2 ; 
  452.     jumpout () ; 
  453.       } 
  454.       break ; 
  455.       default: 
  456.       ; 
  457.       break ; 
  458.     } 
  459.     {
  460.       print ( 265 ) ; 
  461.       printnl ( 266 ) ; 
  462.       printnl ( 267 ) ; 
  463.       if ( baseptr > 0 ) 
  464.       print ( 268 ) ; 
  465.       if ( deletionsallowed ) 
  466.       printnl ( 269 ) ; 
  467.       printnl ( 270 ) ; 
  468.     } 
  469.   } 
  470.   incr ( errorcount ) ; 
  471.   if ( errorcount == 100 ) 
  472.   {
  473.     printnl ( 263 ) ; 
  474.     history = 3 ; 
  475.     jumpout () ; 
  476.   } 
  477.   if ( interaction > 0 ) 
  478.   decr ( selector ) ; 
  479.   if ( useerrhelp ) 
  480.   {
  481.     println () ; 
  482.     giveerrhelp () ; 
  483.   } 
  484.   else while ( helpptr > 0 ) {
  485.       
  486.     decr ( helpptr ) ; 
  487.     printnl ( helpline [ helpptr ] ) ; 
  488.   } 
  489.   println () ; 
  490.   if ( interaction > 0 ) 
  491.   incr ( selector ) ; 
  492.   println () ; 
  493. void zfatalerror ( s ) 
  494. strnumber s ; 
  495. {fatalerror_regmem 
  496.   normalizeselector () ; 
  497.   {
  498.     if ( interaction == 3 ) 
  499.     wakeupterminal () ; 
  500.     printnl ( 262 ) ; 
  501.     print ( 285 ) ; 
  502.   } 
  503.   {
  504.     helpptr = 1 ; 
  505.     helpline [ 0 ] = s ; 
  506.   } 
  507.   {
  508.     if ( interaction == 3 ) 
  509.     interaction = 2 ; 
  510.     if ( logopened ) 
  511.     error () ; 
  512.     ;
  513. #ifdef DEBUG
  514.     if ( interaction > 0 ) 
  515.     debughelp () ; 
  516. #endif /* DEBUG */
  517.     history = 3 ; 
  518.     jumpout () ; 
  519.   } 
  520. void zoverflow ( s , n ) 
  521. strnumber s ; 
  522. integer n ; 
  523. {overflow_regmem 
  524.   normalizeselector () ; 
  525.   {
  526.     if ( interaction == 3 ) 
  527.     wakeupterminal () ; 
  528.     printnl ( 262 ) ; 
  529.     print ( 286 ) ; 
  530.   } 
  531.   print ( s ) ; 
  532.   printchar ( 61 ) ; 
  533.   printint ( n ) ; 
  534.   printchar ( 93 ) ; 
  535.   {
  536.     helpptr = 2 ; 
  537.     helpline [ 1 ] = 287 ; 
  538.     helpline [ 0 ] = 288 ; 
  539.   } 
  540.   {
  541.     if ( interaction == 3 ) 
  542.     interaction = 2 ; 
  543.     if ( logopened ) 
  544.     error () ; 
  545.     ;
  546. #ifdef DEBUG
  547.     if ( interaction > 0 ) 
  548.     debughelp () ; 
  549. #endif /* DEBUG */
  550.     history = 3 ; 
  551.     jumpout () ; 
  552.   } 
  553. void zconfusion ( s ) 
  554. strnumber s ; 
  555. {confusion_regmem 
  556.   normalizeselector () ; 
  557.   if ( history < 2 ) 
  558.   {
  559.     {
  560.       if ( interaction == 3 ) 
  561.       wakeupterminal () ; 
  562.       printnl ( 262 ) ; 
  563.       print ( 289 ) ; 
  564.     } 
  565.     print ( s ) ; 
  566.     printchar ( 41 ) ; 
  567.     {
  568.       helpptr = 1 ; 
  569.       helpline [ 0 ] = 290 ; 
  570.     } 
  571.   } 
  572.   else {
  573.       
  574.     {
  575.       if ( interaction == 3 ) 
  576.       wakeupterminal () ; 
  577.       printnl ( 262 ) ; 
  578.       print ( 291 ) ; 
  579.     } 
  580.     {
  581.       helpptr = 2 ; 
  582.       helpline [ 1 ] = 292 ; 
  583.       helpline [ 0 ] = 293 ; 
  584.     } 
  585.   } 
  586.   {
  587.     if ( interaction == 3 ) 
  588.     interaction = 2 ; 
  589.     if ( logopened ) 
  590.     error () ; 
  591.     ;
  592. #ifdef DEBUG
  593.     if ( interaction > 0 ) 
  594.     debughelp () ; 
  595. #endif /* DEBUG */
  596.     history = 3 ; 
  597.     jumpout () ; 
  598.   } 
  599. boolean initterminal ( ) 
  600. {/* 10 */ register boolean Result; initterminal_regmem 
  601.   topenin () ; 
  602.   if ( last > first ) 
  603.   {
  604.     curinput .locfield = first ; 
  605.     while ( ( curinput .locfield < last ) && ( buffer [ curinput .locfield ] 
  606.     == ' ' ) ) incr ( curinput .locfield ) ; 
  607.     if ( curinput .locfield < last ) 
  608.     {
  609.       Result = true ; 
  610.       return(Result) ; 
  611.     } 
  612.   } 
  613.   while ( true ) {
  614.       
  615.     wakeupterminal () ; 
  616.     (void) Fputs( stdout ,  "**" ) ; 
  617.     flush ( stdout ) ; 
  618.     if ( ! inputln ( stdin , true ) ) 
  619.     {
  620.       (void) putc('\n',  stdout );
  621.       (void) Fputs( stdout ,  "! End of file on the terminal... why?" ) ; 
  622.       Result = false ; 
  623.       return(Result) ; 
  624.     } 
  625.     curinput .locfield = first ; 
  626.     while ( ( curinput .locfield < last ) && ( buffer [ curinput .locfield ] 
  627.     == 32 ) ) incr ( curinput .locfield ) ; 
  628.     if ( curinput .locfield < last ) 
  629.     {
  630.       Result = true ; 
  631.       return(Result) ; 
  632.     } 
  633.     (void) fprintf( stdout , "%s\n",  "Please type the name of your input file." ) ; 
  634.   } 
  635.   return(Result) ; 
  636. strnumber makestring ( ) 
  637. {register strnumber Result; makestring_regmem 
  638.   if ( strptr == maxstrings ) 
  639.   overflow ( 258 , maxstrings - initstrptr ) ; 
  640.   incr ( strptr ) ; 
  641.   strstart [ strptr ] = poolptr ; 
  642.   Result = strptr - 1 ; 
  643.   return(Result) ; 
  644. boolean zstreqbuf ( s , k ) 
  645. strnumber s ; 
  646. integer k ; 
  647. {/* 45 */ register boolean Result; streqbuf_regmem 
  648.   poolpointer j  ; 
  649.   boolean result  ; 
  650.   j = strstart [ s ] ; 
  651.   while ( j < strstart [ s + 1 ] ) {
  652.       
  653.     if ( strpool [ j ] != buffer [ k ] ) 
  654.     {
  655.       result = false ; 
  656.       goto lab45 ; 
  657.     } 
  658.     incr ( j ) ; 
  659.     incr ( k ) ; 
  660.   } 
  661.   result = true ; 
  662.   lab45: Result = result ; 
  663.   return(Result) ; 
  664. boolean zstreqstr ( s , t ) 
  665. strnumber s ; 
  666. strnumber t ; 
  667. {/* 45 */ register boolean Result; streqstr_regmem 
  668.   poolpointer j, k  ; 
  669.   boolean result  ; 
  670.   result = false ; 
  671.   if ( ( strstart [ s + 1 ] - strstart [ s ] ) != ( strstart [ t + 1 ] - 
  672.   strstart [ t ] ) ) 
  673.   goto lab45 ; 
  674.   j = strstart [ s ] ; 
  675.   k = strstart [ t ] ; 
  676.   while ( j < strstart [ s + 1 ] ) {
  677.       
  678.     if ( strpool [ j ] != strpool [ k ] ) 
  679.     goto lab45 ; 
  680.     incr ( j ) ; 
  681.     incr ( k ) ; 
  682.   } 
  683.   result = true ; 
  684.   lab45: Result = result ; 
  685.   return(Result) ; 
  686. void zprinttwo ( n ) 
  687. integer n ; 
  688. {printtwo_regmem 
  689.   n = abs ( n ) % 100 ; 
  690.   printchar ( 48 + ( n / 10 ) ) ; 
  691.   printchar ( 48 + ( n % 10 ) ) ; 
  692. void zprinthex ( n ) 
  693. integer n ; 
  694. {printhex_regmem 
  695.   schar k  ; 
  696.   k = 0 ; 
  697.   printchar ( 34 ) ; 
  698.   do {
  699.       dig [ k ] = n % 16 ; 
  700.     n = n / 16 ; 
  701.     incr ( k ) ; 
  702.   } while ( ! ( n == 0 ) ) ; 
  703.   printthedigs ( k ) ; 
  704. void zprintromanint ( n ) 
  705. integer n ; 
  706. {/* 10 */ printromanint_regmem 
  707.   poolpointer j, k  ; 
  708.   nonnegativeinteger u, v  ; 
  709.   j = strstart [ 260 ] ; 
  710.   v = 1000 ; 
  711.   while ( true ) {
  712.       
  713.     while ( n >= v ) {
  714.     
  715.       printchar ( strpool [ j ] ) ; 
  716.       n = n - v ; 
  717.     } 
  718.     if ( n <= 0 ) 
  719.     return ; 
  720.     k = j + 2 ; 
  721.     u = v / ( strpool [ k - 1 ] - 48 ) ; 
  722.     if ( strpool [ k - 1 ] == 50 ) 
  723.     {
  724.       k = k + 2 ; 
  725.       u = u / ( strpool [ k - 1 ] - 48 ) ; 
  726.     } 
  727.     if ( n + u >= v ) 
  728.     {
  729.       printchar ( strpool [ k ] ) ; 
  730.       n = n + u ; 
  731.     } 
  732.     else {
  733.     
  734.       j = j + 2 ; 
  735.       v = v / ( strpool [ j - 1 ] - 48 ) ; 
  736.     } 
  737.   } 
  738. void printcurrentstring ( ) 
  739. {printcurrentstring_regmem 
  740.   poolpointer j  ; 
  741.   j = strstart [ strptr ] ; 
  742.   while ( j < poolptr ) {
  743.       
  744.     printchar ( strpool [ j ] ) ; 
  745.     incr ( j ) ; 
  746.   } 
  747. void terminput ( ) 
  748. {terminput_regmem 
  749.   integer k  ; 
  750.   flush ( stdout ) ; 
  751.   if ( ! inputln ( stdin , true ) ) 
  752.   fatalerror ( 261 ) ; 
  753.   termoffset = 0 ; 
  754.   decr ( selector ) ; 
  755.   if ( last != first ) 
  756.   {register integer for_end; k = first ; for_end = last - 1 ; if ( k <= 
  757.   for_end) do 
  758.     print ( buffer [ k ] ) ; 
  759.   while ( k++ < for_end ) ; } 
  760.   println () ; 
  761.   incr ( selector ) ; 
  762. void zinterror ( n ) 
  763. integer n ; 
  764. {interror_regmem 
  765.   print ( 284 ) ; 
  766.   printint ( n ) ; 
  767.   printchar ( 41 ) ; 
  768.   error () ; 
  769. void normalizeselector ( ) 
  770. {normalizeselector_regmem 
  771.   if ( logopened ) 
  772.   selector = 19 ; 
  773.   else selector = 17 ; 
  774.   if ( jobname == 0 ) 
  775.   openlogfile () ; 
  776.   if ( interaction == 0 ) 
  777.   decr ( selector ) ; 
  778. void pauseforinstructions ( ) 
  779. {pauseforinstructions_regmem 
  780.   if ( OKtointerrupt ) 
  781.   {
  782.     interaction = 3 ; 
  783.     if ( ( selector == 18 ) || ( selector == 16 ) ) 
  784.     incr ( selector ) ; 
  785.     {
  786.       if ( interaction == 3 ) 
  787.       wakeupterminal () ; 
  788.       printnl ( 262 ) ; 
  789.       print ( 294 ) ; 
  790.     } 
  791.     {
  792.       helpptr = 3 ; 
  793.       helpline [ 2 ] = 295 ; 
  794.       helpline [ 1 ] = 296 ; 
  795.       helpline [ 0 ] = 297 ; 
  796.     } 
  797.     deletionsallowed = false ; 
  798.     error () ; 
  799.     deletionsallowed = true ; 
  800.     interrupt = 0 ; 
  801.   } 
  802. integer zhalf ( x ) 
  803. integer x ; 
  804. {register integer Result; half_regmem 
  805.   if ( odd ( x ) ) 
  806.   Result = ( x + 1 ) / 2 ; 
  807.   else Result = x / 2 ; 
  808.   return(Result) ; 
  809. scaled zrounddecimals ( k ) 
  810. smallnumber k ; 
  811. {register scaled Result; rounddecimals_regmem 
  812.   integer a  ; 
  813.   a = 0 ; 
  814.   while ( k > 0 ) {
  815.       
  816.     decr ( k ) ; 
  817.     a = ( a + dig [ k ] * 131072L ) / 10 ; 
  818.   } 
  819.   Result = ( a + 1 ) / 2 ; 
  820.   return(Result) ; 
  821. void zprintscaled ( s ) 
  822. scaled s ; 
  823. {printscaled_regmem 
  824.   scaled delta  ; 
  825.   if ( s < 0 ) 
  826.   {
  827.     printchar ( 45 ) ; 
  828.     s = - (integer) s ; 
  829.   } 
  830.   printint ( s / 65536L ) ; 
  831.   printchar ( 46 ) ; 
  832.   s = 10 * ( s % 65536L ) + 5 ; 
  833.   delta = 10 ; 
  834.   do {
  835.       if ( delta > 65536L ) 
  836.     s = s - 17232 ; 
  837.     printchar ( 48 + ( s / 65536L ) ) ; 
  838.     s = 10 * ( s % 65536L ) ; 
  839.     delta = delta * 10 ; 
  840.   } while ( ! ( s <= delta ) ) ; 
  841. scaled zmultandadd ( n , x , y , maxanswer ) 
  842. integer n ; 
  843. scaled x ; 
  844. scaled y ; 
  845. scaled maxanswer ; 
  846. {register scaled Result; multandadd_regmem 
  847.   if ( n < 0 ) 
  848.   {
  849.     x = - (integer) x ; 
  850.     n = - (integer) n ; 
  851.   } 
  852.   if ( n == 0 ) 
  853.   Result = y ; 
  854.   else if ( ( ( x <= ( maxanswer - y ) / n ) && ( - (integer) x <= ( maxanswer 
  855.   + y ) / n ) ) ) 
  856.   Result = n * x + y ; 
  857.   else {
  858.       
  859.     aritherror = true ; 
  860.     Result = 0 ; 
  861.   } 
  862.   return(Result) ; 
  863. scaled zxovern ( x , n ) 
  864. scaled x ; 
  865. integer n ; 
  866. {register scaled Result; xovern_regmem 
  867.   boolean negative  ; 
  868.   negative = false ; 
  869.   if ( n == 0 ) 
  870.   {
  871.     aritherror = true ; 
  872.     Result = 0 ; 
  873.     remainder = x ; 
  874.   } 
  875.   else {
  876.       
  877.     if ( n < 0 ) 
  878.     {
  879.       x = - (integer) x ; 
  880.       n = - (integer) n ; 
  881.       negative = true ; 
  882.     } 
  883.     if ( x >= 0 ) 
  884.     {
  885.       Result = x / n ; 
  886.       remainder = x % n ; 
  887.     } 
  888.     else {
  889.     
  890.       Result = - (integer) ( ( - (integer) x ) / n ) ; 
  891.       remainder = - (integer) ( ( - (integer) x ) % n ) ; 
  892.     } 
  893.   } 
  894.   if ( negative ) 
  895.   remainder = - (integer) remainder ; 
  896.   return(Result) ; 
  897. scaled zxnoverd ( x , n , d ) 
  898. scaled x ; 
  899. integer n ; 
  900. integer d ; 
  901. {register scaled Result; xnoverd_regmem 
  902.   boolean positive  ; 
  903.   nonnegativeinteger t, u, v  ; 
  904.   if ( x >= 0 ) 
  905.   positive = true ; 
  906.   else {
  907.       
  908.     x = - (integer) x ; 
  909.     positive = false ; 
  910.   } 
  911.   t = ( x % 32768L ) * n ; 
  912.   u = ( x / 32768L ) * n + ( t / 32768L ) ; 
  913.   v = ( u % d ) * 32768L + ( t % 32768L ) ; 
  914.   if ( u / d >= 32768L ) 
  915.   aritherror = true ; 
  916.   else u = 32768L * ( u / d ) + ( v / d ) ; 
  917.   if ( positive ) 
  918.   {
  919.     Result = u ; 
  920.     remainder = v % d ; 
  921.   } 
  922.   else {
  923.       
  924.     Result = - (integer) u ; 
  925.     remainder = - (integer) ( v % d ) ; 
  926.   } 
  927.   return(Result) ; 
  928. halfword zbadness ( t , s ) 
  929. scaled t ; 
  930. scaled s ; 
  931. {register halfword Result; badness_regmem 
  932.   integer r  ; 
  933.   if ( t == 0 ) 
  934.   Result = 0 ; 
  935.   else if ( s <= 0 ) 
  936.   Result = 10000 ; 
  937.   else {
  938.       
  939.     if ( t <= 7230584L ) 
  940.     r = ( t * 297 ) / s ; 
  941.     else if ( s >= 1663497L ) 
  942.     r = t / ( s / 297 ) ; 
  943.     else r = t ; 
  944.     if ( r > 1290 ) 
  945.     Result = 10000 ; 
  946.     else Result = ( r * r * r + 131072L ) / 262144L ; 
  947.   } 
  948.   return(Result) ; 
  949. #ifdef DEBUG
  950. void zprintword ( w ) 
  951. memoryword w ; 
  952. {printword_regmem 
  953.   printint ( w .cint ) ; 
  954.   printchar ( 32 ) ; 
  955.   printscaled ( w .cint ) ; 
  956.   printchar ( 32 ) ; 
  957.   printscaled ( round ( 65536L * w .gr ) ) ; 
  958.   println () ; 
  959.   printint ( w .hh .v.LH ) ; 
  960.   printchar ( 61 ) ; 
  961.   printint ( w .hh.b0 ) ; 
  962.   printchar ( 58 ) ; 
  963.   printint ( w .hh.b1 ) ; 
  964.   printchar ( 59 ) ; 
  965.   printint ( w .hh .v.RH ) ; 
  966.   printchar ( 32 ) ; 
  967.   printint ( w .qqqq .b0 ) ; 
  968.   printchar ( 58 ) ; 
  969.   printint ( w .qqqq .b1 ) ; 
  970.   printchar ( 58 ) ; 
  971.   printint ( w .qqqq .b2 ) ; 
  972.   printchar ( 58 ) ; 
  973.   printint ( w .qqqq .b3 ) ; 
  974. #endif /* DEBUG */
  975.